package com.ck.server.controller.test;

import com.ck.common.annotation.RequestLimiter;
import com.ck.common.constant.AjaxResult;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @author ck
 * @date 2023/11/28 15:30
 */

/**
 *令牌桶(token-bucket)的工作原理:
 *  令牌桶可以看作是一个存放令牌的容器，预先设定一定的容量。系统按设定的速度向桶中放置令牌，当桶中令牌满时，多余的令牌溢出。
 *  也就是说要使数据被传输必须保证令牌桶里有足够多的令牌，如果令牌数量不够，则数据会被丢弃或缓存。这就可以限制报文的流量只能小于等于令牌生成的速度，达到限制流量的目的。
 */
@RestController
@Api(tags = "基于(令牌桶)算法的接口限流测试 接口")
@Slf4j
public class RequestLimiterController {

    @GetMapping("/rateLimiterTestOne")
    @RequestLimiter(key = "limit1")
    public AjaxResult rateLimiterTest(){
        log.info("获取令牌成功");
        return AjaxResult.success("请求成功");
    }

    @GetMapping("/rateLimiterTestTwo")
    @RequestLimiter(key = "limit2",msg = "正在排队中，请耐心等待")
    public AjaxResult rateLimiterTwo(){
        log.info("获取令牌成功");
        return AjaxResult.success("请求成功");
    }
}
